package com.xmut.mall.member.vo;

import com.xmut.mall.member.constant.CouponRangeDayEnum;
import com.xmut.mall.member.constant.PromotionsStatusEnum;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

@Data
public class CouponEntityVo {
    private Long id;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 活动结束时间
     */
    private Date endTime;
    /**
     * 活动名称
     */
    private String promotionName;
    /**
     * 店铺ID
     */
    private Long storeId;
    /**
     * 店铺名称
     */
    private String storeName;
    /**
     * 活动开始时间
     */
    private Date startTime;
    /**
     * 消费门槛
     */
    private BigDecimal consumeThreshold;
    /**
     * 折扣
     */
    private BigDecimal couponDiscount;
    /**
     * 领取限制
     */
    private Integer couponLimitNum;
    /**
     * 优惠券名称
     */
    private String couponName;
    /**
     * 活动类型
     */
    private String couponType;
    /**
     * 活动描述
     */
    private String description;
    /**
     * 优惠券类型
     */
    private String getType;
    /**
     * 面额
     */
    private BigDecimal price;
    /**
     * 发行数量
     */
    private Integer publishNum;
    /**
     * 已被领取的数量
     */
    private Integer receivedNum;
    /**
     * 范围关联的ID
     */
    private String scopeId;
    /**
     * 关联范围类型
     */
    private String scopeType;
    /**
     * 店铺承担比例
     */
    private BigDecimal storeCommission;
    /**
     * 已被使用的数量
     */
    private Integer usedNum;
    /**
     *
     */
    private String rangeDayType;
    /**
     *
     */
    private Integer effectiveDays;

    public String getPromotionStatus() {
        if (this.rangeDayType != null && this.rangeDayType.equals(CouponRangeDayEnum.DYNAMICTIME.name())
                && (this.effectiveDays != null && this.effectiveDays > 0 && this.effectiveDays <= 365)) {
            return PromotionsStatusEnum.START.name();
        }
        return this.getPromotionStatus1();
    }

    public String getPromotionStatus1() {
        if (endTime == null) {
            return startTime != null ? PromotionsStatusEnum.START.name() : PromotionsStatusEnum.CLOSE.name();
        }
        Date now = new Date();
        if (now.before(startTime)) {
            return PromotionsStatusEnum.NEW.name();
        } else if (endTime.before(now)) {
            return PromotionsStatusEnum.END.name();
        } else if (now.before(endTime)) {
            return PromotionsStatusEnum.START.name();
        }
        return PromotionsStatusEnum.CLOSE.name();
    }
}
